home *** CD-ROM | disk | FTP | other *** search
/ Aminet 1 / Aminet - June 1993 [Walnut Creek].iso / usenet / sources / volume91 / aplictns / quiz_1_0 / part01 next >
Encoding:
Internet Message Format  |  1991-04-10  |  67.5 KB

  1. Path: news.larc.nasa.gov!amiga-request
  2. From: amiga-request@ab20.larc.nasa.gov (Amiga Sources/Binaries Moderator)
  3. Subject: v91i084: Quiz 1.0 - question and answer program, Part01/02
  4. Reply-To: creubank@is.crl.sony.co.jp
  5. Newsgroups: comp.sources.amiga
  6. Message-ID: <comp.sources.amiga:v91i084@ab20.larc.nasa.gov>
  7. Date: 10 Apr 91 14:57:38 GMT
  8. Approved: tadguy@uunet.UU.NET (Tad Guy)
  9. X-Mail-Submissions-To: amiga@uunet.uu.net
  10. X-Post-Discussions-To: comp.sys.amiga.misc
  11.  
  12. Submitted-by: creubank@is.crl.sony.co.jp
  13. Posting-number: Volume 91, Issue 084
  14. Archive-name: applications/quiz-1.0/part01
  15.  
  16. [ executable to appear in comp.binaries.amiga  ...tad ]
  17.  
  18. Quiz 1.0, similar to UNIX's /usr/games/quiz, will quiz you given a
  19. question-answer file.  It keeps a history over trials and questions,
  20. and can graph the results.  I find it useful for practicing
  21. vocabulary.  Source, binary and a couple of sample quiz files are
  22. included.  Enjoy.
  23.                       -creubank
  24.  
  25. #!/bin/sh
  26. # This is a shell archive.  Remove anything before this line, then unpack
  27. # it by saving it into a file and typing "sh file".  To overwrite existing
  28. # files, type "sh file -c".  You can also feed this as standard input via
  29. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  30. # will see the following message at the end:
  31. #        "End of archive 1 (of 2)."
  32. # Contents:  README graph.c graph.h mymalloc.c nihongo1 nihongo1.sc
  33. #   parse.c.h qstructs.h quiz-with screen.h thumbdown.bi thumbup.bi
  34. #   zhongwen1 zhongwen1.sc
  35. # Wrapped by tadguy@ab20 on Wed Apr 10 10:57:36 1991
  36. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  37. if test -f 'README' -a "${1}" != "-c" ; then 
  38.   echo shar: Will not clobber existing file \"'README'\"
  39. else
  40. echo shar: Extracting \"'README'\" \(6623 characters\)
  41. sed "s/^X//" >'README' <<'END_OF_FILE'
  42. X20 March 1991
  43. X
  44. XQuiz 1.0
  45. X
  46. X1. INTRODUCTION
  47. X
  48. XThis is the first release of quiz, a simple question-answer program
  49. Xsimilar to the unix program /usr/games/quiz.  It is useful for
  50. Xmemorizing vocabulary or other information that can be related in
  51. Xpairs, for example, country names and their capital cities.
  52. X
  53. XGiven an input file of questions and answers, quiz will ask the user
  54. Xquestions and grade the user's answers.  The program can be run from
  55. XCLI or workbench.  (I haven't made a nice icon for it yet.)   You can
  56. Xuse data files from /usr/games/quiz as well.  Simply type:
  57. X
  58. X CLI> quiz [quizfile] [-switch] [-help] [-ignorecase]
  59. X
  60. XArgument order doesn't matter and you can abbreviate the options to a
  61. Xsingle letter (i.e. "-s").  Options:
  62. X
  63. X   -switch: Asks the answer and expects question.
  64. X
  65. X   -ignorecase: case doesn't matter
  66. X
  67. X   -help: displays a brief help message and exits
  68. X
  69. XQuiz records and can graph previous sessions to show your progress
  70. Xover time.
  71. X
  72. X2. EXAMPLE SESSION
  73. X
  74. XAs an example, try:
  75. X
  76. X  1> quiz nihongo1
  77. X
  78. XQuiz will open up a new screen.  Since we have specified a question
  79. Xfile, quiz begins by quizzing us right away.  Type your answer to the
  80. Xquestion in the text gadget.  Quiz will ask all of the questions from
  81. Xthe data file in a random order until you get them all right.  If you
  82. Xmiss any particular question more than four times (#define'd as
  83. XMAXWRONG in "qstructs.h") quiz will assume you are hopeless on that
  84. Xquestion and not ask it again.  You now know enough to use the basic
  85. Xfeatures of quiz.  Read on only if you want details.
  86. X
  87. XAfter you have answered all the questions, a list of the questions you
  88. Xmissed and your score will be printed on the CLI from which you
  89. Xstarted quiz.
  90. X
  91. X3. COMMANDS
  92. X
  93. XTo load a new file, type the file name in the same text gadget that is
  94. Xused for answers.  Then select "Load" from the main menu or use
  95. X"Right-Amiga L".  The session will begin immediately.  After a session
  96. Xis complete, you can rerun it by selecting "Begin" from the main menu
  97. Xor by using the keyboard equivalent (Right-Amiga b).  "Quit" from the
  98. Xmain menu will end the quiz session.
  99. X
  100. X4. HISTORY GRAPHING
  101. X
  102. XAfter the first time you answer a question file, subsequent sessions
  103. Xwill show the history of your progress in one of two ways.  The
  104. Xdefault graph is a bar graph that shows how often you answered each
  105. Xquestion incorrectly.  I.e., the higher the bar, the more times you
  106. Xhave missed that question.  Clicking on a question's bar will make
  107. Xquiz switch to that question immediately.  The previously displayed
  108. Xquestion will be asked again later.  Switch to the questions graph by
  109. Xselecting "Graph ?'s" from the Options menu (or use Right-Amiga ?).
  110. X
  111. XQuestions not yet answered are shown in flesh-color.  Questions
  112. Xanswered correcty the first time are shown in sky blue.  Those that
  113. Xhave been missed at least once are shown in a kind of reddish-brown.
  114. X
  115. XThe other graph shows your total score across many sessions for a
  116. Xparticular data file.  Select this graph from the Options menu "Graph
  117. XTrials" selection (or use Right-Amiga t).  Clicking on a bar in this
  118. Xmode has no meaning.
  119. X
  120. XQuiz saves history information for question file "quizdata" in
  121. X"quizdata.sc".  In order to save history information, there must be
  122. Xroom on the quiz data volume and it must be writable.
  123. X
  124. X5. OTHER OPTIONS
  125. X
  126. XOther options are available from the Options menu as follows:
  127. X
  128. X  5.1  Switch      (Right-Amiga s)
  129. X       Simply switches the question and answer.  Thus you will be given
  130. X       the answer and have to provide the question.  (No fair using
  131. X       this to cheat.)
  132. X
  133. X  5.2  Ignore Case (Right-Amiga i)
  134. X       If Ignore Case is selected, case does not matter.  I.e., "CaT"
  135. X       would match "cat".  Default is that case DOES matter.
  136. X
  137. X  5.3  Abort       (Right-Amiga a)
  138. X       Selecting abort causes the current trial to end.  A history
  139. X       entry will not be written.
  140. X
  141. X6. THE QUESTION FILE
  142. X
  143. XA quiz data file contains lines of the form:
  144. X
  145. Xquestion:answer
  146. X
  147. XIn the simplest case, this could be something like:
  148. X
  149. XLargest state in the US:Alaska
  150. X
  151. XYou can specify more than one match by using '|'.  For example:
  152. X
  153. XFirst President of the US:George Washington|George|Washington
  154. X
  155. XThus any of "George", "Washington" or "George Washington" would be a
  156. Xcorrect response to this question.  In addition, '{' and '}' can be
  157. Xused to save typing and disk space.  Brackets can be nested to any
  158. Xdepth.  Trailing and leading white space is deleted in an entry and in
  159. Xthe user's answer.
  160. X
  161. XQuiz {Author|Programmer}:{Curtis|C{.} {R}} Eubanks
  162. X
  163. XThis question patterns matches: (only one will be displayed as the
  164. Xquestion)
  165. X
  166. X  Quiz Author
  167. X  Quiz Programmer
  168. X
  169. Xand the answer pattern:
  170. X  Curtis Eubanks
  171. X  C Eubanks
  172. X  C. Eubanks
  173. X  C R Eubanks
  174. X  C. R Eubanks
  175. X
  176. XNote that {.} matches both the empty string and '.'.
  177. X
  178. XSeveral example files are included.  When you finish a quiz session, a
  179. Xscore file is written: "quizfile.sc" and appended to each additional
  180. Xtime the program is run with quizfile.  Each line of this file contains
  181. Xa list of the missed questions.
  182. X
  183. X7. THE THUMB
  184. X
  185. XThe thumb doesn't mean anything yet, but if you click on it, it changes
  186. Xstate.  Use it to boost your morale or something.
  187. X
  188. X8.  THE CODE
  189. X
  190. XThis was written on a plain Amiga 1000 over a year ago.  I compiled it
  191. Xwith Lattice 3.10.  To compile, execute the following lattice commands:
  192. X
  193. X 1> lc -ac screen
  194. X 1> lc quiz parse mymalloc graph
  195. X 1> blink with quiz-with
  196. X
  197. XThis program is public domain.  I wouldn't mind getting a $10 or $15
  198. Xdonation if you find it useful, but I don't require it.  If I ever
  199. Xmake an significant update, anyone who sends me $15 or more will
  200. Xreceive the new version.  This program can be freely distributed as
  201. Xlong as all of the files in this directory are included.  If you make
  202. Xany changes to the code, please let me know before redistributing.
  203. X
  204. XI hope you enjoy "quiz" and that you find it useful---it has been for
  205. Xme. 
  206. XThere are undoubtedly bugs in the code.  If you find any, please let
  207. Xme know.  (If possible, provide a fix.)  I have not tested this code on
  208. Xanything other than an Amiga 1000.  Also drop me a note if you find
  209. Xerrors in this documentation, or if you feel any part is unclear/not
  210. Xdetailed enough/too detailed. 
  211. X
  212. XAny questions or comments are always welcome.  Mail to any of the
  213. Xfollowing will get to me (if you are sending money in US dollars, it
  214. Xis better to send it to the US address):
  215. X
  216. X   creubank@is.crl.sony.co.jp   creubank@media-lab.media.mit.edu
  217. X
  218. X   Curtis Eubanks               Curtis Eubanks
  219. X   Mezon Marukyo Rm 201         c/o Vernon Eubanks
  220. X   5-38-10 Minami-magome        6984 Y Lightning Ranch Rd.
  221. X   Oota-ku, Tokyo 143 JAPAN     Hereford, AZ 85616 USA
  222. END_OF_FILE
  223. if test 6623 -ne `wc -c <'README'`; then
  224.     echo shar: \"'README'\" unpacked with wrong size!
  225. fi
  226. # end of 'README'
  227. fi
  228. if test -f 'graph.c' -a "${1}" != "-c" ; then 
  229.   echo shar: Will not clobber existing file \"'graph.c'\"
  230. else
  231. echo shar: Extracting \"'graph.c'\" \(11010 characters\)
  232. sed "s/^X//" >'graph.c' <<'END_OF_FILE'
  233. X/***
  234. X *** graph.c
  235. X *** routines to draw quiz graph
  236. X ***
  237. X *** Curtis Eubanks 3 December 1989
  238. X ***
  239. X ***/
  240. X
  241. X#include <intuition/intuition.h>
  242. X#define GLOBALVAR extern
  243. X#include "qstructs.h"
  244. X#include "graph.h"
  245. X/*---------------------*/
  246. X/*  stuff in screen.h  */
  247. X/*---------------------*/
  248. Xextern struct Border gtop; /* border structure for graph */
  249. Xextern short gbotpts[], gtoppts[];
  250. Xextern struct RastPort *rp;
  251. X
  252. X/*---------------------*/
  253. X/* functions in quiz.c */
  254. X/*---------------------*/
  255. Xextern int readfile();
  256. Xextern int countlines();
  257. Xextern QuizState qstate;
  258. Xextern void ilistAdd();
  259. Xextern ilist *Makeilist();
  260. Xextern char **extractlines();
  261. Xextern void NonFatalError();
  262. X
  263. X/*-------------------------*/
  264. X/* functions in mymalloc.c */
  265. X/*-------------------------*/
  266. Xextern char *mymalloc();
  267. X
  268. X/*------------------*/
  269. X/* stuff in parse.h */
  270. X/*------------------*/
  271. Xextern void remwh();
  272. X
  273. X/**********************/
  274. Xint numspaces(), readscore();
  275. Xvoid printstats(), SetWorstQuestion();
  276. Xvoid cleargraph(), drawgraph();
  277. Xvoid UpdateCurrentQ();
  278. Xint *AddTrial(), whichquestion();
  279. X
  280. X/* buffer to hold score file */
  281. Xchar *scbuff = NULL;
  282. X
  283. Xtypedef struct _ScoreData {
  284. X   short numtrials;
  285. X   short num_questions;  /* greatest index of a missed question        */
  286. X   short worst_trial;    /* the worst trial                            */
  287. X   short most_missed;    /* max # of questions missed in one trial     */
  288. X   short worst_question; /* the number of times the worst question was */
  289. X                         /* missed--not the index!                     */
  290. X   ilist *trial_data;    /* data for # questions missed for each trial */
  291. X                         /* this is an ilist because we want to add a  */
  292. X                         /* new value every time a trial is run        */
  293. X   int   *quest_data;    /* data for each question  --                 */
  294. X                         /* # times missed over all trials             */
  295. X} ScoreData;
  296. XScoreData sdata;
  297. X
  298. X/* count the number of spaces in a string      */
  299. X/* returns -1 if the string is the null string */
  300. Xint numspaces(s)
  301. X  char *s;
  302. X{
  303. X int n=0;
  304. X if (*s == '\0') return -1;
  305. X while (*s) { if (*s == ' ') n++; s++; }
  306. X return n;
  307. X} /* numspaces */
  308. X
  309. X/* read in .sc file.  If one doesn't exist or otherwise unsuccessful,
  310. X   returns 0.  Otherwise returns 1 */
  311. X
  312. Xint readscore(num)
  313. X  int num; /* # of questions in question file */
  314. X{
  315. X  char scorefile[MAXFILENAME+3];
  316. X  char **lines;
  317. X  int n,i,j,/*greatest=-1*/;
  318. X  int worstt = -1, worstq = -1, worsttnum=0;
  319. X
  320. X  int    an_int;
  321. X  char  *sptr;
  322. X  ilist *iptr;
  323. X
  324. X  strcpy(scorefile,qstate.File);
  325. X  strcat(scorefile, ".sc");
  326. X#ifdef DEBUG
  327. Xprintf("Readfile: num is %d\n",num);
  328. X#endif
  329. X  if (readfile(scorefile, &scbuff)==0) return 0;
  330. X
  331. X  /* successful read */
  332. X  n = countlines(scbuff);
  333. X#ifdef DEBUG
  334. Xprintf("n=%d num=%d\n",n,num);
  335. X#endif
  336. X
  337. X  lines = extractlines(n, scbuff);
  338. X#ifdef DEBUG
  339. Xprintf("lines=%d\n",lines);
  340. X#endif
  341. X
  342. X  /* We want to be able to present the graph in two ways---
  343. X     by the total number of items missed each time and for each
  344. X     item, the number of times it was missed over all trials:
  345. X
  346. X       | *                 item1 |****
  347. X# of   | *                 item2 |*
  348. Xmissed | **                item3 |
  349. Xitems  | ***      *        item4 |*********
  350. X       |_***__*___**__     item5 |***_________
  351. X         trial                     #times missed
  352. X
  353. X     Because of this, we should represent the data in two ways.
  354. X  */
  355. X  sdata.numtrials = n;
  356. X  sdata.num_questions = num;
  357. X  iptr = NULL;
  358. X /*  sdata.trial_data = Makeilist(0); old->Allocate(n * sizeof(int));*/
  359. X  for (i=0;i<n;i++) {
  360. X    int num_missed;
  361. X    remwh(lines[i]); /* space at the end */
  362. X    num_missed = numspaces(lines[i])+1;
  363. X    if (iptr) {
  364. X      ilistAdd(iptr, num_missed);
  365. X      if (num_missed > worstt) worstt = num_missed, worsttnum=i;
  366. X      } /* if */
  367. X    else {
  368. X    sdata.trial_data = Makeilist(num_missed);
  369. X    iptr = sdata.trial_data;
  370. X    worstt = num_missed; /* worsttnum already = 0 */
  371. X    } /* else */
  372. X
  373. X    /* just speeds things up for ilistAdd */
  374. X     if (iptr->next) iptr = iptr->next;        /* does nothing first time */
  375. X
  376. X    } /* i */
  377. X  sdata.worst_trial = worsttnum; sdata.most_missed = worstt;
  378. X  sdata.quest_data = (int *)Allocate(num * sizeof(int)); /* zeroed */
  379. X
  380. X  for (iptr = sdata.trial_data,i=0;iptr;iptr=iptr->next, i++) {
  381. X    sptr = lines[i];
  382. X    for (j = 0; j < iptr->i; j++) {
  383. X      sscanf(sptr, "%d", &an_int);
  384. X      if (an_int>num) NonFatalError("Warning: score file is corrupt!\n");
  385. X      else sdata.quest_data[an_int]++;
  386. X      while ((*sptr != ' ')&&(*sptr != '\n')) sptr++;
  387. X      sptr++; /* point to next integer */
  388. X      } /* j */
  389. X    } /* iptr, i */
  390. X  /* and once more just for fun! */
  391. X  for (i=0;i<num;i++)
  392. X    if (sdata.quest_data[i] > worstq) worstq = sdata.quest_data[i];
  393. X  sdata.worst_question = worstq;
  394. X
  395. X/* printstats();*/
  396. X cleargraph();
  397. X drawgraph();
  398. X return BYQUESTION;
  399. X} /* readscore */
  400. X
  401. X/* update sdata by adding the data from a new trial.  If this is the first
  402. X   trial, we also set qstate.GraphType */
  403. Xint *AddTrial(numwrong,numq)
  404. X   int numwrong,numq; /* number wrong this trial */
  405. X{
  406. X  int i, worstt=-1, worsttnum = 0;
  407. X  ilist *iptr;
  408. X  sdata.numtrials++;
  409. X
  410. X  if (qstate.GraphType) {
  411. X    ilistAdd(sdata.trial_data, numwrong);
  412. X    /* need to set sdata.worst_trial as well! */
  413. X    if (numwrong > sdata.most_missed) sdata.most_missed = numwrong;
  414. X    for (i=0;i<sdata.num_questions;i++)
  415. X      if (sdata.quest_data[i] > sdata.worst_question)
  416. X         sdata.worst_question = sdata.quest_data[i];
  417. X    } /* if */
  418. X  else {
  419. X    sdata.numtrials = 1;
  420. X    sdata.trial_data = Makeilist(numwrong);
  421. X    sdata.num_questions = numq;
  422. X    sdata.quest_data = (int *)Allocate(sdata.num_questions * sizeof(int));
  423. X    sdata.worst_trial = 0;
  424. X    sdata.worst_question = 0;
  425. X    qstate.GraphType = BYQUESTION;
  426. X    } /* else */
  427. X
  428. X    /* find worst trial */
  429. X   iptr = sdata.trial_data; i = 0; worstt = iptr->i;
  430. X   while (iptr) {
  431. X     if (iptr->i > worstt) worstt = iptr->i,worsttnum = i;
  432. X     i++;
  433. X     iptr = iptr->next;
  434. X     } /* while iptr */
  435. X
  436. X   sdata.worst_trial = worsttnum;
  437. X   sdata.most_missed = worstt;
  438. X
  439. X   return sdata.quest_data;
  440. X} /* AddTrial */
  441. X
  442. X/* sets the worst question */
  443. Xvoid SetWorstQuestion(n)
  444. X  int n;
  445. X{ sdata.worst_question = (short)n; } /* SetWorstQuestion */
  446. X
  447. Xvoid printstats()
  448. X{
  449. X int i, t=0;
  450. X ilist *iptr;
  451. X printf(" %d trials\n", sdata.numtrials);
  452. X printf(" %d questions\n", sdata.num_questions);
  453. X printf(" worst trial   : %d\n", sdata.worst_trial);
  454. X printf(" worst question: %d\n", sdata.worst_question);
  455. X printf(" trials\n");
  456. X iptr = sdata.trial_data;
  457. X while (iptr) {
  458. X   printf("%d\t",t++);
  459. X   for (i=0;i<iptr->i;i++) printf("*"); printf("\n");
  460. X   iptr = iptr->next;
  461. X   } /* while */
  462. X printf("questions\n");
  463. X for (i=0;i<sdata.num_questions;i++) {
  464. X   for (t=0;t<sdata.quest_data[i];t++) printf("*"); printf("\n");
  465. X   } /* for */
  466. X}  /* printstats */
  467. X
  468. X#define GREY7 25 /* 888 */
  469. X/* clear the graph area */
  470. Xvoid cleargraph() {
  471. X   SetDrMd(rp, JAM1);
  472. X   SetAPen(rp, GREY7);
  473. X   RectFill(rp, (int)gtoppts[2], (int)gtoppts[3],
  474. X            (int)gbotpts[2], (int)gbotpts[3]);
  475. X} /* cleargraph */
  476. X/* Draw the graph represented by the current ScoreData structure */
  477. X#define GRAPHCOLOR 19
  478. X#define SELECTCOLOR 0
  479. X#define WRONGCOLOR 16 /* red   */ 
  480. X#define RIGHTCOLOR 10 /* green */
  481. Xvoid drawgraph() {
  482. X
  483. X  /* The amount of screen that we have available for use is defined
  484. X     in graph.h.  We (well, *I*) will center the the graph in this
  485. X     box.  We have to find a reasonable number of elements with a
  486. X     reasonable width */
  487. X
  488. X   short startx, i, width, height;
  489. X   ilist *iptr;
  490. X
  491. X   SetAPen(rp, GRAPHCOLOR);
  492. X   SetDrMd(rp, JAM1);
  493. X   if (qstate.GraphType == BYTRIAL) {
  494. X#if 0
  495. X     if ((sdata.numtrials * BESTWIDTH) < GRAPHW) /* no need to muck w/stuff */
  496. X#endif
  497. X
  498. X       DrawBorder(rp,>op,0,0);
  499. X       width = (short)((float)GRAPHW / (float)sdata.numtrials);
  500. X       if (width == 0) return;
  501. X       height = (short) ((float)GRAPHH / (float)sdata.most_missed);
  502. X       startx = GRAPHX + GRAPHW/2 - (sdata.numtrials*width)/2;
  503. X       for (iptr=sdata.trial_data;iptr;startx+=width,iptr=iptr->next)
  504. X         RectFill(rp, startx, GRAPHY+GRAPHH-height*iptr->i,
  505. X                  startx+width-1, GRAPHY+GRAPHH);
  506. X      } /* if BYTRIAL */
  507. X
  508. X   else if (qstate.GraphType == BYQUESTION) {
  509. X      DrawBorder(rp, >op, 0, 0);
  510. X      width = (short)((float)GRAPHW / (float)sdata.num_questions);
  511. X      if (width == 0) return;
  512. X      height = (short) ((float)GRAPHH / (float)sdata.worst_question);
  513. X      startx = GRAPHX + GRAPHW/2 - (sdata.num_questions*width)/2;
  514. X      if ((history == NULL) || (hindices==NULL)) return;
  515. X      for (i=0; i < sdata.num_questions; i++,) {
  516. X         if (history[i] == RIGHT)
  517. X           SetAPen(rp, RIGHTCOLOR);
  518. X         else if (history[i])
  519. X           SetAPen(rp, WRONGCOLOR);
  520. X         else
  521. X           SetAPen(rp, GRAPHCOLOR);
  522. X         RectFill(rp, startx+width*hindices[i],
  523. X                  GRAPHY+GRAPHH-height*sdata.quest_data[hindices[i]],
  524. X                  startx+(hindices[i]+1)*width-1, GRAPHY+GRAPHH);
  525. X         } /* for */
  526. X         if (qstate.Asking) {
  527. X           SetAPen(rp, SELECTCOLOR);
  528. X           RectFill(rp, startx+width*currentquestion,
  529. X                  GRAPHY+GRAPHH-height*sdata.quest_data[currentquestion],
  530. X                  startx+(currentquestion+1)*width-1, GRAPHY+GRAPHH);
  531. X           } /* if */
  532. X   } /* if BYQUESTION */
  533. X} /* drawgraph */
  534. X
  535. X/* change graph colors to reflect new current color */
  536. X/* *note*: sets currentquestion to new!!!           */
  537. Xvoid UpdateCurrentQ(old,new)
  538. X   int old, new;
  539. X{
  540. X   short startx, width, height, oindex=-1,i;
  541. X   currentquestion = new;
  542. X   if (qstate.GraphType != BYQUESTION) return;
  543. X   width = (short)((float)GRAPHW / (float)sdata.num_questions);
  544. X   if (width == 0) return;
  545. X   height = (int) ((float)GRAPHH / (float)sdata.worst_question);
  546. X   startx = GRAPHX + GRAPHW/2 - (sdata.num_questions*width)/2;
  547. X   /* draw old in graph color */
  548. X   /* this is really bad */
  549. X   for (i=0; oindex == -1; i++) if (hindices[i]==old) oindex = i;
  550. X
  551. X   if (history[oindex]==RIGHT) SetAPen(rp, RIGHTCOLOR);
  552. X   else if (history[oindex]) SetAPen(rp, WRONGCOLOR);
  553. X   else SetAPen(rp, GRAPHCOLOR);
  554. X
  555. X   RectFill(rp, startx+width*old, GRAPHY+GRAPHH -
  556. X            height*sdata.quest_data[old], startx+width*(old+1)-1,
  557. X            GRAPHY+GRAPHH);
  558. X
  559. X  /* and new */
  560. X   SetAPen(rp, SELECTCOLOR);
  561. X   RectFill(rp, startx+width*new, GRAPHY+GRAPHH -
  562. X            height*sdata.quest_data[new], startx+width*(new+1)-1,
  563. X            GRAPHY+GRAPHH);
  564. X
  565. X} /* UpdateCurrentQ */
  566. X
  567. X/* find which question is pointed to by x, y, if any.  Return the index,
  568. X   or -1 if none */
  569. Xint whichquestion(x,y)
  570. X    SHORT x, y;
  571. X{
  572. X  short startx, endx, width;
  573. X  if ((x < GRAPHX) || (x > GRAPHX+GRAPHW) ||
  574. X      (y < GRAPHY) || (y > GRAPHY+GRAPHH)) return -1;
  575. X  width = (short)((float)GRAPHW / (float)sdata.num_questions);
  576. X  startx = GRAPHX + GRAPHW/2 - (sdata.num_questions*width)/2;
  577. X  if (x < startx) return -1;
  578. X
  579. X  endx = startx + sdata.num_questions * width;
  580. X  if (x > endx) return -1;
  581. X
  582. X  return (int) ((float)(x-startx) / (float) width);
  583. X} /* which question */
  584. END_OF_FILE
  585. if test 11010 -ne `wc -c <'graph.c'`; then
  586.     echo shar: \"'graph.c'\" unpacked with wrong size!
  587. fi
  588. # end of 'graph.c'
  589. fi
  590. if test -f 'graph.h' -a "${1}" != "-c" ; then 
  591.   echo shar: Will not clobber existing file \"'graph.h'\"
  592. else
  593. echo shar: Extracting \"'graph.h'\" \(181 characters\)
  594. sed "s/^X//" >'graph.h' <<'END_OF_FILE'
  595. X#define GRAPHW 150
  596. X#define GRAPHH 50
  597. X#define GRAPHX 150
  598. X#define GRAPHY 15
  599. X#define BESTWIDTH 4
  600. X/* graph types */
  601. X#define NOGRAPH      0
  602. X#define BYTRIAL      1
  603. X#define BYQUESTION   2
  604. END_OF_FILE
  605. if test 181 -ne `wc -c <'graph.h'`; then
  606.     echo shar: \"'graph.h'\" unpacked with wrong size!
  607. fi
  608. # end of 'graph.h'
  609. fi
  610. if test -f 'mymalloc.c' -a "${1}" != "-c" ; then 
  611.   echo shar: Will not clobber existing file \"'mymalloc.c'\"
  612. else
  613. echo shar: Extracting \"'mymalloc.c'\" \(7288 characters\)
  614. sed "s/^X//" >'mymalloc.c' <<'END_OF_FILE'
  615. X/***
  616. X ***  mymalloc.c
  617. X ***
  618. X ***  Curtis Eubanks
  619. X ***  2 November 1989
  620. X ***
  621. X ***/
  622. X
  623. X/*#define DEBUG*/
  624. X#ifndef NULL
  625. X#include <stdio.h>
  626. X#endif
  627. X#include <exec/types.h>
  628. X#include <exec/memory.h>
  629. X#define GLOBALVAR extern
  630. X#include "qstructs.h"
  631. X/***
  632. X mymalloc is my first stab at decreasing the memory fragmentation that
  633. X results from allocating a large number of small memory chunks.
  634. X
  635. X mymalloc contains a list of free memory chunks (initially NULL).  The
  636. X first time mymalloc(numbytes) is called, it will allocated a chunk of
  637. X size (numbytes + INITCHUNKSIZE) bytes.  The bytesfree field in this
  638. X initial chunk is set to INITCHUNKSIZE.
  639. X
  640. X On successive calls, mymalloc tries to allocate enough the requested
  641. X size from the first element of the memory chunk list.  If there isn't
  642. X enough room, a new chunk is created of size (numbytes +
  643. X INITCHUNKSIZE).  The list of chunks is kept sorted so that requests
  644. X for small amounts of memory can be efficiently allocated.  Whenever
  645. X the bytesfree field of a memory chunk is less than MINFREE, that
  646. X chunk is removed from the available memory chunk list.
  647. X
  648. X If numbytes < 1 or if there isn't enough system memory, mymalloc
  649. X returns NULL.  Otherwise, a pointer to the new (zeroed) memory is
  650. X returned.
  651. X
  652. X My malloc rounds numbytes to sizeof(int) so that the returned pointer is
  653. X word-aligned.
  654. X***/
  655. X
  656. X#define MINFREE 1
  657. X#define INITCHUNKSIZE 4096
  658. X
  659. Xextern char *AllocMem();
  660. Xchar *mymalloc();
  661. X
  662. Xstruct memchunk {
  663. X  char *chunkptr;
  664. X  int bytesfree;
  665. X};
  666. X
  667. Xstruct chunklist {
  668. X  struct memchunk *chunk;
  669. X  struct chunklist *next,*prev;
  670. X};
  671. X
  672. Xstatic struct chunklist *availmem = NULL;
  673. X
  674. Xchar *mymalloc(numbytes)
  675. X  int numbytes;            /* number of bytes to allocate */
  676. X{
  677. X  char *rtn;
  678. X  struct chunklist *curchunk;
  679. X
  680. X#ifdef DEBUG
  681. Xprintf("myalloc called with %d; availmem is %d; *availmem is %d\n",
  682. X        numbytes, availmem, *availmem);
  683. X#endif
  684. X  if (numbytes<1) return(NULL);
  685. X  /* long word align */
  686. X  if (numbytes % sizeof(int)) numbytes += sizeof(int) - numbytes % sizeof(int);
  687. X
  688. X  if (availmem==NULL) {            /* first time? */
  689. X
  690. X    availmem = (struct chunklist *)
  691. X      AllocMem(sizeof(struct chunklist),MEMF_CLEAR);
  692. X    if (availmem == NULL)
  693. X      FatalError("Out of memory!  Couldn't allocate %ld bytes\n",
  694. X                  sizeof(struct chunklist));
  695. X    CleanUp(ALLOC_MSG, (char *)availmem, sizeof(struct chunklist));
  696. X
  697. X
  698. X    availmem->next = NULL;
  699. X    availmem->prev = NULL;
  700. X
  701. X    availmem->chunk = (struct memchunk *)
  702. X       AllocMem(sizeof(struct memchunk),MEMF_CLEAR);
  703. X    if (availmem->chunk == NULL)
  704. X      FatalError("Out of memory!  Couldn't allocate %ld bytes\n",
  705. X                  sizeof(struct memchunk));
  706. X    CleanUp(ALLOC_MSG, (char *)availmem->chunk, sizeof(struct memchunk));
  707. X
  708. X    availmem->chunk->chunkptr =
  709. X      AllocMem(numbytes + INITCHUNKSIZE,MEMF_CLEAR);
  710. X    if (availmem->chunk->chunkptr==NULL) return(NULL);
  711. X    CleanUp(ALLOC_MSG, (char *)availmem->chunk->chunkptr,
  712. X            numbytes + INITCHUNKSIZE);
  713. X
  714. X    availmem->chunk->bytesfree = INITCHUNKSIZE;
  715. X    rtn = availmem->chunk->chunkptr;
  716. X    availmem->chunk->chunkptr += numbytes;
  717. X#ifdef DEBUG
  718. X  {
  719. X   int numchunk = 0;
  720. X   struct chunklist *last;
  721. X   last = availmem;
  722. X   printf("Availmem:\n");
  723. X   if (!last) printf(" [chunklist empty]\n");
  724. X   while (last) {
  725. X     numchunk++;
  726. X     printf("  chunk %ld = %ld, prev=%ld, next=%ld,\n\tptr=%d, free=%ld\n",
  727. X            numchunk, last, last->prev, last->next, last->chunk->chunkptr,
  728. X            last->chunk->bytesfree);
  729. X     last=last->next;
  730. X     } /* while last */
  731. X  } /* DEBUG */
  732. X#endif
  733. X
  734. X    return(rtn);
  735. X    } /* if availmem==NULL */
  736. X
  737. X  curchunk = availmem;
  738. X  /* step through memory list looking for enough memory */
  739. X  while (curchunk) {
  740. X    if (curchunk->chunk->bytesfree >= numbytes) {
  741. X      /* found enough! */
  742. X      rtn = curchunk->chunk->chunkptr;
  743. X      curchunk->chunk->chunkptr += numbytes; /* forgot this! */
  744. X      curchunk->chunk->bytesfree -= numbytes;
  745. X
  746. X      /* We're not done yet.  Have to sort the chunklist.  The only
  747. X         modified chunk is curchunk, so it's the only chunk that may
  748. X         have to be repositioned. */
  749. X
  750. Xreposcheck:
  751. X      if (   (curchunk != availmem) /* I love it */
  752. X          && (curchunk->prev->chunk->bytesfree >
  753. X              curchunk->chunk->bytesfree))
  754. X        { /* have to reposition curchunk */
  755. X          /* <-a<->b<->c ==> <-b<->a<->c */
  756. X      struct chunklist *a, *b, *c;
  757. X          b = curchunk;    a = b->prev;    c = b->next;
  758. X          /* detach b */
  759. X          a->next = c;
  760. X          if (c) c->prev = a;
  761. X          /* reattach b */
  762. X          b->prev = a->prev; /* might be NULL */
  763. X          b->next = a;
  764. X          a->prev = b;
  765. X          if (b->prev == NULL) availmem = b;
  766. X          curchunk = b;
  767. X          goto reposcheck;       /* may have to do it again */
  768. X        }
  769. X#ifdef DEBUG
  770. X  {
  771. X   int numchunk = 0;
  772. X   struct chunklist *last;
  773. X   last = availmem;
  774. X   printf("Availmem:\n");
  775. X   if (!last) printf(" [chunklist empty]\n");
  776. X   while (last) {
  777. X     numchunk++;
  778. X     printf("  chunk %ld = %ld, prev=%ld, next=%ld,\n\tptr=%d, free=%ld\n",
  779. X            numchunk, last, last->prev, last->next, last->chunk->chunkptr,
  780. X            last->chunk->bytesfree);
  781. X     last=last->next;
  782. X     } /* while last */
  783. X  } /* DEBUG */
  784. X#endif
  785. X
  786. X       return(rtn);
  787. X    } /* if there's enough memory in this chunk */
  788. X  curchunk = curchunk->next;
  789. X  } /* while curchunk */
  790. X  /* didn't find memory, must allocate more */
  791. X  {
  792. X  struct chunklist *newchunk, *last;
  793. X
  794. X  newchunk = (struct chunklist *)
  795. X    AllocMem(sizeof (struct chunklist),MEMF_CLEAR);
  796. X  if (newchunk == NULL)
  797. X    FatalError("Out of memory!  Couldn't allocate %ld bytes\n",
  798. X      sizeof(struct chunklist));
  799. X  CleanUp(ALLOC_MSG, (char *)newchunk, sizeof(struct chunklist));
  800. X
  801. X  newchunk->chunk = (struct memchunk *)
  802. X     AllocMem(sizeof(struct memchunk),MEMF_CLEAR);
  803. X  if (newchunk->chunk==NULL)
  804. X    FatalError("Out of memory!  Couldn't allocate %ld bytes\n",
  805. X      sizeof(struct memchunk));
  806. X  CleanUp(ALLOC_MSG, (char *)newchunk->chunk, sizeof(struct memchunk));
  807. X
  808. X  newchunk->chunk->chunkptr =
  809. X    AllocMem(numbytes + INITCHUNKSIZE,MEMF_CLEAR);
  810. X  if (newchunk->chunk->chunkptr==NULL) return(NULL);
  811. X  CleanUp(ALLOC_MSG, (char *)newchunk->chunk->chunkptr,
  812. X          numbytes + INITCHUNKSIZE);
  813. X
  814. X  newchunk->chunk->bytesfree = INITCHUNKSIZE;
  815. X  /* and add it to the list */
  816. X  last = availmem;
  817. X  while (last->next) last = last->next;
  818. X  last->next = newchunk;
  819. X  newchunk->prev = last;
  820. X  newchunk->next = NULL; /* should already be */
  821. X  rtn = newchunk->chunk->chunkptr;
  822. X  newchunk->chunk->chunkptr += numbytes;
  823. X#ifdef DEBUG
  824. X  {
  825. X   int numchunk = 0;
  826. X   struct chunklist *last;
  827. X   last = availmem;
  828. X   printf("Availmem:\n");
  829. X   if (!last) printf(" [chunklist empty]\n");
  830. X   while (last) {
  831. X     numchunk++;
  832. X     printf("  chunk %ld = %ld, prev=%ld, next=%ld,\n\tptr=%d, free=%ld\n",
  833. X            numchunk, last, last->prev, last->next, last->chunk->chunkptr,
  834. X            last->chunk->bytesfree);
  835. X     last=last->next;
  836. X     } /* while last */
  837. X  } /* DEBUG */
  838. X#endif
  839. X
  840. X  return(rtn);
  841. X  }
  842. X} /* mymalloc */
  843. X
  844. X/* This is a hack.  It doesn't really free the memory, but, by setting
  845. X   availmem to NULL, mymalloc thinks that there is no free memory and
  846. X   will allocate new memory.  It is necessary for the memory to be freed
  847. X   elsewhere! */
  848. Xvoid ForgetMemory()
  849. X  {
  850. X   availmem = NULL;
  851. X  } /* ForgetMemory */
  852. END_OF_FILE
  853. if test 7288 -ne `wc -c <'mymalloc.c'`; then
  854.     echo shar: \"'mymalloc.c'\" unpacked with wrong size!
  855. fi
  856. # end of 'mymalloc.c'
  857. fi
  858. if test -f 'nihongo1' -a "${1}" != "-c" ; then 
  859.   echo shar: Will not clobber existing file \"'nihongo1'\"
  860. else
  861. echo shar: Extracting \"'nihongo1'\" \(528 characters\)
  862. sed "s/^X//" >'nihongo1' <<'END_OF_FILE'
  863. Xto come out (album, movie):dete{ }kuru
  864. Xpiece/song:kyoku
  865. Xfirecracker:bakuchiku
  866. Xbattery:denchi
  867. Xtoy:omocha
  868. XTGIF:hana{ }kin
  869. Xto be audible:kikoeru
  870. Xto turn:mawasu|magaru
  871. Xto get tired of x:{x ni} akiru
  872. Xforget it (said to yourself):ki{ }ni shinai
  873. Xchange (money):{o}tsuri
  874. Xsubway entrance/exit area:kaisatsu{ }guchi
  875. Xto return (not kaeru):modoru
  876. Ximpossible:muri|fukano{o|u}
  877. Xto eat (male):kuu
  878. Xto loaf around the house:goro{ }goro {suru}
  879. Xto dry:kansou {suru}
  880. Xdirection:ho{o|u}{ko{o|u}|men}
  881. Xmethod:ho{o|u}ho{o|u}
  882. Xto get lost:{michi ni} mayou
  883. END_OF_FILE
  884. if test 528 -ne `wc -c <'nihongo1'`; then
  885.     echo shar: \"'nihongo1'\" unpacked with wrong size!
  886. fi
  887. # end of 'nihongo1'
  888. fi
  889. if test -f 'nihongo1.sc' -a "${1}" != "-c" ; then 
  890.   echo shar: Will not clobber existing file \"'nihongo1.sc'\"
  891. else
  892. echo shar: Extracting \"'nihongo1.sc'\" \(7 characters\)
  893. sed "s/^X//" >'nihongo1.sc' <<'END_OF_FILE'
  894. X0 3 9 
  895. END_OF_FILE
  896. if test 7 -ne `wc -c <'nihongo1.sc'`; then
  897.     echo shar: \"'nihongo1.sc'\" unpacked with wrong size!
  898. fi
  899. # end of 'nihongo1.sc'
  900. fi
  901. if test -f 'parse.c.h' -a "${1}" != "-c" ; then 
  902.   echo shar: Will not clobber existing file \"'parse.c.h'\"
  903. else
  904. echo shar: Extracting \"'parse.c.h'\" \(464 characters\)
  905. sed "s/^X//" >'parse.c.h' <<'END_OF_FILE'
  906. Xextern void slistAdd();
  907. Xextern struct slist *Makeslist();
  908. Xint slistSize();
  909. Xextern void remwh();
  910. Xextern char *findfirstbrace();
  911. Xextern char *findlevel();
  912. Xextern void deletebrackets();
  913. Xextern char *snarfbrackets();
  914. Xextern void printslist();
  915. Xextern struct slist *FindOrs();
  916. Xextern struct slist *findors();
  917. Xextern int checkbrackets();
  918. Xextern struct slist *joinslists();
  919. Xextern char *findmatchbrace();
  920. Xextern struct slist *expandslist();
  921. Xextern struct slist *expand();
  922. END_OF_FILE
  923. if test 464 -ne `wc -c <'parse.c.h'`; then
  924.     echo shar: \"'parse.c.h'\" unpacked with wrong size!
  925. fi
  926. # end of 'parse.c.h'
  927. fi
  928. if test -f 'qstructs.h' -a "${1}" != "-c" ; then 
  929.   echo shar: Will not clobber existing file \"'qstructs.h'\"
  930. else
  931. echo shar: Extracting \"'qstructs.h'\" \(1712 characters\)
  932. sed "s/^X//" >'qstructs.h' <<'END_OF_FILE'
  933. X/* messages sent from bhandlemsg() to quiz() */
  934. X#define QUITNOW       -1
  935. X#define IGNORE         0
  936. X#define NEWSTRING      1
  937. X#define SWITCHEM       2
  938. X#define OPENNEWFILE    3
  939. X#define STARTASKING    4
  940. X#define ABORTNOW       5
  941. X#define DISPLAYQ       6 /* display a new question */
  942. X
  943. X
  944. X
  945. X/**** cleanup messages ****/
  946. X#define DONE_MSG 0
  947. X#define ALLOC_MSG 1
  948. X#define LOCK_MSG 2
  949. X#define INIT_MSG 3
  950. X#define NEWSCREEN_MSG 4
  951. X#define NEWWINDOW_MSG 5
  952. X#define LIB_MSG 6
  953. X#define FREEONE_MSG 7
  954. X#define FREEALL_MSG 8
  955. X
  956. X#define ALLOC_TYPE 1
  957. X#define LOCK_TYPE 2
  958. X#define SCREEN_TYPE 4
  959. X#define WINDOW_TYPE 5
  960. X#define LIB_TYPE 6
  961. X
  962. X#define MAXFILENAME 80
  963. X#define SCORE_FILE_EXT ".sc"
  964. X
  965. X#define RIGHT 256
  966. X#define MAXWRONG -4
  967. X
  968. X/***** type definitions ******/
  969. X
  970. Xtypedef struct _QuizState {
  971. X   short Switch;         /* if 1, switch questions and answers */
  972. X   short CaseSensitive;  /* if 1, case matters                 */
  973. X   short Asking;         /* if 1, we are currently in ask mode */
  974. X   short ShowingAns;     /* if 1, we are showing an answer     */
  975. X   short GraphType;      /* if 0, we no graph (no score file)  */
  976. X                         /* if 1, graph by trials              */
  977. X                         /* if 2, graph by questions           */
  978. X   char File[MAXFILENAME];
  979. X   } QuizState;
  980. X
  981. XGLOBALVAR QuizState qstate;
  982. XGLOBALVAR char *buf;
  983. XGLOBALVAR int newquestion; /* a new question was selected */
  984. XGLOBALVAR int currentquestion;
  985. XGLOBALVAR short *history, *hindices;
  986. X
  987. X/* Resource List */
  988. Xstruct ResListItem {
  989. X  struct Node n;
  990. X  char *ptr;
  991. X  int size, type;
  992. X};
  993. X
  994. X/* an slist is a linked list of strings */
  995. Xstruct slist { char *s; struct slist *next; };
  996. X
  997. X/* linked list of ints */
  998. Xtypedef struct _ilist { int i; struct _ilist *next; } ilist;
  999. X
  1000. END_OF_FILE
  1001. if test 1712 -ne `wc -c <'qstructs.h'`; then
  1002.     echo shar: \"'qstructs.h'\" unpacked with wrong size!
  1003. fi
  1004. # end of 'qstructs.h'
  1005. fi
  1006. if test -f 'quiz-with' -a "${1}" != "-c" ; then 
  1007.   echo shar: Will not clobber existing file \"'quiz-with'\"
  1008. else
  1009. echo shar: Extracting \"'quiz-with'\" \(190 characters\)
  1010. sed "s/^X//" >'quiz-with' <<'END_OF_FILE'
  1011. X;
  1012. X; Blink with file
  1013. X; quiz
  1014. X; 3 Nov 1989
  1015. X; 18 Nov 1989
  1016. X
  1017. XFROM
  1018. X   lib:c.o
  1019. X   quiz.o
  1020. X   parse.o
  1021. X   mymalloc.o
  1022. X   screen.o
  1023. X   graph.o
  1024. XLIB
  1025. X   lib:lc.lib
  1026. X   lib:amiga.lib
  1027. X   lib:lcm.lib
  1028. XTO
  1029. X   quiz
  1030. END_OF_FILE
  1031. if test 190 -ne `wc -c <'quiz-with'`; then
  1032.     echo shar: \"'quiz-with'\" unpacked with wrong size!
  1033. fi
  1034. # end of 'quiz-with'
  1035. fi
  1036. if test -f 'screen.h' -a "${1}" != "-c" ; then 
  1037.   echo shar: Will not clobber existing file \"'screen.h'\"
  1038. else
  1039. echo shar: Extracting \"'screen.h'\" \(9874 characters\)
  1040. sed "s/^X//" >'screen.h' <<'END_OF_FILE'
  1041. X#include <exec/types.h>
  1042. X#include <intuition/intuition.h>
  1043. X#include <graphics/gfx.h>
  1044. X#include "thumbup.bi"
  1045. X#include "thumbdown.bi"
  1046. X#define GLOBALVAR extern
  1047. X#include "qstructs.h"
  1048. X
  1049. X#define DPEN 0
  1050. X#define BPEN 1
  1051. X#define MFPEN 0
  1052. X#define MBPEN 2
  1053. X
  1054. Xextern struct IntuitionBase *IntuitionBase;
  1055. Xextern struct GfxBase *GfxBase;
  1056. Xextern struct Screen *OpenScreen();
  1057. Xextern struct Window *OpenWindow();
  1058. Xstruct IntuiMessage *GetMsg();
  1059. X
  1060. X/* default DPaint colormap */
  1061. XUSHORT mycmap[] = {
  1062. X   0x0000,0x0eca,0x0e00,0x0a00,0x0d80,0x0fe0,0x08f0,0x0080,
  1063. X   0x00b6,0x00dd,0x00af,0x007c,0x000f,0x070f,0x0c0e,0x0c08,
  1064. X   0x0620,0x0e52,0x0a52,0x0fca,0x0333,0x0444,0x0555,0x0666,
  1065. X   0x0777,0x0888,0x0999,0x0aaa,0x0ccc,0x0ddd,0x0eee,0x0fff
  1066. X   };
  1067. X#define GREY1  0  /* 000 */  /* black */
  1068. X#define GREY2  20 /* 333 */
  1069. X#define GREY3  21 /* 444 */
  1070. X#define GREY4  22 /* 555 */
  1071. X#define GREY5  23 /* 666 */
  1072. X#define GREY6  24 /* 777 */
  1073. X#define GREY7  25 /* 888 */
  1074. X#define GREY8  26 /* 999 */
  1075. X#define GREY9  27 /* aaa */
  1076. X#define GREY10 28 /* ccc */
  1077. X#define GREY11 29 /* ddd */
  1078. X#define GREY12 30 /* eee */
  1079. X#define GREY13 31 /* fff */  /* white */
  1080. X
  1081. Xstruct TextAttr topaz = { "topaz.font", 8, 0, 0};
  1082. Xstruct NewScreen ns = {0,0,320,200,5,DPEN,BPEN,0,CUSTOMSCREEN,&topaz,
  1083. X                       "Quiz",NULL,NULL };
  1084. Xstruct Screen *qscreen = NULL;
  1085. X
  1086. Xstruct NewWindow /*errnw = { 0,15,100,50,DPEN,BPEN,CLOSEWINDOW|REFRESHWINDOW,
  1087. X                           SIMPLE_REFRESH|WINDOWCLOSE|WINDOWDRAG|WINDOWSIZING,
  1088. X                           NULL,NULL,"Error Window",NULL,NULL,30,30,100,40,
  1089. X                           CUSTOMSCREEN},*/
  1090. X backnw = {0,0,320,200,DPEN,GREY7,
  1091. X           REFRESHWINDOW|GADGETDOWN|GADGETUP|MENUPICK|ACTIVATE|MOUSEBUTTONS,
  1092. X           BACKDROP|SIMPLE_REFRESH|BORDERLESS,NULL,NULL,
  1093. X           "",NULL,NULL,0,0,0,0,CUSTOMSCREEN};
  1094. X
  1095. Xstruct Window *backwindow = NULL;
  1096. Xstruct RastPort *rp;
  1097. Xstruct ViewPort *vp;
  1098. Xstruct IntuiMessage *mes;
  1099. X
  1100. Xint maxqchars=0,baseheight=0;
  1101. X#define MAXQCHARS 120
  1102. X#define STRINGID 1
  1103. X#define IMAGEID 2
  1104. X
  1105. X#define BUFFLEN 128
  1106. Xchar sbuff[BUFFLEN], ubuff[BUFFLEN], *qtext=NULL, *atext=NULL, *ctext=NULL;
  1107. Xstruct StringInfo sStringInfo = {
  1108. X  /* Buffer, UndoBuffer  */ sbuff, ubuff,
  1109. X  /* BufferPos, MaxChars */ 0, BUFFLEN};
  1110. X
  1111. X#define CENTERX(width) (160-((width)/2))
  1112. X
  1113. X#define BORDWIDTH 3
  1114. X#define SGADW 280
  1115. X#define SGADH 8
  1116. X#define SGADX CENTERX(SGADW)
  1117. X#define SGADY 125
  1118. X#define QX (SGADX+3)
  1119. X/* position of "Correct Text" box */
  1120. X#define CX QX
  1121. X#define CY (SGADY+20)
  1122. X
  1123. X#define MAXLINES 5 /* maximum number of lines in question text */
  1124. X#define QY SGADY-MAXLINES*8-6
  1125. X#define MAXQX QX + SGADW
  1126. X
  1127. X#define IGADW 103
  1128. X#define IGADH 43
  1129. X#define IGADX 15      /*CENTERX(IGADW)*/
  1130. X#define IGADY 20
  1131. X
  1132. X#include "graph.h"     /* defines GRAPHW, GRAPHH, GRAPHX, GRAPHY */
  1133. X
  1134. Xshort gbotpts[] = { GRAPHX+GRAPHW+BORDWIDTH,GRAPHY-BORDWIDTH,
  1135. X                    GRAPHX+GRAPHW+BORDWIDTH,GRAPHY+GRAPHH+BORDWIDTH,
  1136. X                    GRAPHX-BORDWIDTH,GRAPHY+GRAPHH+BORDWIDTH };
  1137. Xshort gtoppts[] = { GRAPHX-BORDWIDTH,GRAPHY+GRAPHH+BORDWIDTH,
  1138. X                    GRAPHX-BORDWIDTH,GRAPHY-BORDWIDTH,
  1139. X                    GRAPHX+GRAPHW+BORDWIDTH,GRAPHY-BORDWIDTH };
  1140. X
  1141. Xshort botbordpts[] = { SGADW+BORDWIDTH,-BORDWIDTH,
  1142. X                       SGADW+BORDWIDTH,SGADH+BORDWIDTH,
  1143. X                       -BORDWIDTH,SGADH+BORDWIDTH };
  1144. Xshort topbordpts[] = { -BORDWIDTH,SGADH+BORDWIDTH,
  1145. X                       -BORDWIDTH,-BORDWIDTH,
  1146. X                       SGADW+BORDWIDTH,-BORDWIDTH };
  1147. X
  1148. Xshort iconbotpts[] = { IGADX+IGADW+BORDWIDTH,IGADY-BORDWIDTH,
  1149. X                       IGADX+IGADW+BORDWIDTH,IGADY+IGADH+BORDWIDTH,
  1150. X                       IGADX-BORDWIDTH,IGADY+IGADH+BORDWIDTH };
  1151. Xshort icontoppts[] = { IGADX-BORDWIDTH,IGADY+IGADH+BORDWIDTH,
  1152. X                       IGADX-BORDWIDTH,IGADY-BORDWIDTH,
  1153. X                       IGADX+IGADW+BORDWIDTH,IGADY-BORDWIDTH };
  1154. X
  1155. Xshort qpb[] = {0,0,0,0,0,0}, qpt[] = {0,0,0,0,0,0};
  1156. Xshort cpb[] = {0,0,0,0,0,0}, cpt[] = {0,0,0,0,0,0};
  1157. X
  1158. X/*   bottom and right side border of sgadget   */
  1159. Xstruct Border borderbot = {
  1160. X   /* LeftEdge, TopEdge */  0,0,
  1161. X   /* FrontPen, BackPen */  GREY2, 0,
  1162. X   /* DrawMode          */  JAM1,
  1163. X   /* Count             */  3,
  1164. X   /* *XY               */  botbordpts,
  1165. X   /* NextBorder        */  NULL
  1166. X   };
  1167. Xstruct Border bordertop = { 0,0,GREY11,0,JAM1,3,topbordpts,&borderbot };
  1168. Xstruct Border ibb       = { 0,0,GREY2, 0,JAM1,3,iconbotpts,NULL       };
  1169. Xstruct Border ibt       = { 0,0,GREY11,0,JAM1,3,icontoppts,&ibb       };
  1170. Xstruct Border qbot      = { 0,0,GREY2, 0,JAM1,3,qpb,NULL              };
  1171. Xstruct Border qtop      = { 0,0,GREY11,0,JAM1,3,qpt,&qbot             };
  1172. Xstruct Border cbot      = { 0,0,GREY2, 0,JAM1,3,cpb,NULL              };
  1173. Xstruct Border ctop      = { 0,0,GREY11,0,JAM1,3,cpt,&cbot             };
  1174. Xstruct Border gbot      = { 0,0,GREY2, 0,JAM1,3,gbotpts,NULL          };
  1175. Xstruct Border gtop      = { 0,0,GREY11,0,JAM1,3,gtoppts,&gbot         };
  1176. X
  1177. Xstruct Gadget igadget = {
  1178. X  /* NextGadget        */ NULL,
  1179. X  /* LeftEdge, TopEdge */ IGADX, IGADY,
  1180. X  /* Width, Height     */ IGADW, IGADH,
  1181. X  /* Flags             */ GADGHIMAGE|GADGIMAGE,
  1182. X  /* Activation        */ TOGGLESELECT|RELVERIFY,
  1183. X  /* GadgetType        */ BOOLGADGET,
  1184. X  /* GadgetRender      */ (APTR)(&thumbup),
  1185. X  /* SelectRender      */ (APTR)(&thumbdown),
  1186. X  /* GadgetText        */ NULL,
  1187. X  /* MutualExclude     */ 0,
  1188. X  /* SpecialInfo       */ NULL,
  1189. X  /* GadgetID          */ IMAGEID,
  1190. X  /* UserData          */ NULL };
  1191. X
  1192. Xstruct Gadget sgadget = { &igadget,SGADX,SGADY,SGADW,SGADH,GADGHCOMP,
  1193. X                         TOGGLESELECT|RELVERIFY,STRGADGET,(APTR)(&bordertop),
  1194. X                         NULL,NULL,0,(APTR)(&sStringInfo),STRINGID,NULL };
  1195. X
  1196. X#define PROJMENU 0
  1197. X#define OPTMENU 1
  1198. X#define MENU1WIDTH 73
  1199. X#define MENU2WIDTH 143
  1200. X#define MENUITEMHEIGHT 10
  1201. X
  1202. Xstruct IntuiText ProjMIQuitText =
  1203. X{
  1204. X  /* FrontPen, BackPen */ MFPEN, MBPEN,
  1205. X  /* DrawMode          */ JAM1,
  1206. X  /* LeftEdge, TopEdge */ 2, 0,
  1207. X  /* ITextFont         */ &topaz,
  1208. X  /* IText             */ "Quit     ",
  1209. X  /* NextText          */ NULL
  1210. X},
  1211. XProjMILoadText={MFPEN,MBPEN,JAM1,2,0,&topaz,"Load     ",NULL},
  1212. XProjMIAboutText={MFPEN,MBPEN,JAM1,2,0,&topaz,"About    ",NULL},
  1213. XProjMIBeginText={MFPEN,MBPEN,JAM1,2,0,&topaz,"Begin    ",NULL},
  1214. X
  1215. XOptMISwitchText={MFPEN,MBPEN,JAM1,2,0,&topaz,"  Switch       ",NULL},
  1216. XOptMIIgnoreText={MFPEN,MBPEN,JAM1,2,0,&topaz,"  Ignore case  ",NULL},
  1217. XOptMIAbortText={MFPEN,MBPEN,JAM1,2,0,&topaz, "  Abort        ",NULL},
  1218. XOptMITrialText={MFPEN,MBPEN,JAM1,2,0,&topaz, "  Graph trials ",NULL},
  1219. XOptMIQuestText={MFPEN,MBPEN,JAM1,2,0,&topaz, "  Graph ?'s    ",NULL};
  1220. X
  1221. X#if 0
  1222. Xstruct MenuItem ProjMINone = {
  1223. X/* NextItem              */ &MProjMIDumb,/*(struct MenuItem *)NULL,*/
  1224. X/* LeftEdge, TopEdge     */ 5, MENUITEMHEIGHT*2,
  1225. X/* Width, Height         */ MENU1WIDTH-5, 0,
  1226. X/* Flags                 */ ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ,
  1227. X/* MutualExclude         */ 0,
  1228. X/* ItemFill              */ (APTR)(&ProjMIQuitText),
  1229. X/* SelectFill            */ (APTR)NULL,
  1230. X/* Command               */ 'q',
  1231. X/* SubItem               */ (struct MenuItem *)NULL,
  1232. X/* NextSelect            */ 0
  1233. X};
  1234. X#endif
  1235. X
  1236. X#define QUITNUM 3
  1237. Xstruct MenuItem MProjMIQuit =
  1238. X { NULL,5,MENUITEMHEIGHT*3,MENU1WIDTH,MENUITEMHEIGHT,
  1239. X   ITEMENABLED|ITEMTEXT|HIGHBOX/*|COMMSEQ*/,0,(APTR)(&ProjMIQuitText),
  1240. X   (APTR)NULL,'\0',NULL,0};
  1241. X
  1242. X#define BEGINNUM 2
  1243. X#define BEGINMENUNUM (SHIFTITEM(BEGINNUM)|SHIFTSUB(NOSUB)) /* first menu */
  1244. Xstruct MenuItem MProjMIBegin =
  1245. X { &MProjMIQuit,5,MENUITEMHEIGHT*2,MENU1WIDTH,MENUITEMHEIGHT,
  1246. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ,0,(APTR)(&ProjMIBeginText),
  1247. X   (APTR)NULL,'b',NULL,0};
  1248. X
  1249. X#define LOADNUM 1
  1250. Xstruct MenuItem MProjMILoad =
  1251. X { &MProjMIBegin,5,MENUITEMHEIGHT*1,MENU1WIDTH,MENUITEMHEIGHT,
  1252. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ,0,(APTR)(&ProjMILoadText),
  1253. X   (APTR)NULL,'l',NULL,0};
  1254. X
  1255. X#define ABOUTNUM 0
  1256. Xstruct MenuItem MProjMIAbout =
  1257. X { &MProjMILoad,5,MENUITEMHEIGHT*0,MENU1WIDTH,MENUITEMHEIGHT,
  1258. X   ITEMENABLED|ITEMTEXT|HIGHBOX/*|COMMSEQ*/,0,(APTR)(&ProjMIAboutText),
  1259. X   (APTR)NULL,0,NULL,0};
  1260. X
  1261. X/* these two are mutually excluded */
  1262. X#define MENUBYQUESTION 4
  1263. X#define MENUBYTRIAL 3
  1264. X#define TRIALMENUNUM (SHIFTMENU(1)|SHIFTITEM(MENUBYTRIAL)|SHIFTSUB(NOSUB))
  1265. X#define QUESTMENUNUM (SHIFTMENU(1)|SHIFTITEM(MENUBYQUESTION)|SHIFTSUB(NOSUB))
  1266. X
  1267. Xstruct MenuItem MOptQuest =
  1268. X  {
  1269. X   NULL, 1, MENUITEMHEIGHT*4, MENU2WIDTH,
  1270. X   MENUITEMHEIGHT,
  1271. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ|CHECKIT|MENUTOGGLE,
  1272. X   1<<MENUBYTRIAL,(APTR)(&OptMIQuestText),
  1273. X   (APTR)NULL, '?', NULL, 0};
  1274. X
  1275. Xstruct MenuItem MOptTrial =
  1276. X  {
  1277. X   &MOptQuest, 1, MENUITEMHEIGHT*3, MENU2WIDTH,
  1278. X   MENUITEMHEIGHT,
  1279. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ|CHECKIT|MENUTOGGLE|CHECKED,
  1280. X   1<<MENUBYQUESTION,(APTR)(&OptMITrialText),
  1281. X   (APTR)NULL, 't', NULL, 0};
  1282. X
  1283. X#define ABORTNUM 2
  1284. Xstruct MenuItem MOptAbort =
  1285. X { &MOptTrial,1,MENUITEMHEIGHT*2,MENU2WIDTH,
  1286. X   MENUITEMHEIGHT,
  1287. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ,
  1288. X   0,(APTR)(&OptMIAbortText),
  1289. X   (APTR)NULL,'a',NULL,0};
  1290. X
  1291. X#define IGNORENUM 1
  1292. Xstruct MenuItem MOptIgnore =
  1293. X { &MOptAbort,1,MENUITEMHEIGHT*1,MENU2WIDTH,
  1294. X   MENUITEMHEIGHT,
  1295. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ|CHECKIT|MENUTOGGLE,
  1296. X   0,(APTR)(&OptMIIgnoreText),
  1297. X   (APTR)NULL,'i',NULL,0};
  1298. X
  1299. X#define SWITCHNUM 0
  1300. Xstruct MenuItem MOptSwitch =
  1301. X { &MOptIgnore,1,MENUITEMHEIGHT*0,MENU2WIDTH,
  1302. X   MENUITEMHEIGHT,
  1303. X   ITEMENABLED|ITEMTEXT|HIGHBOX|COMMSEQ|CHECKIT|MENUTOGGLE,
  1304. X   0,(APTR)(&OptMISwitchText),
  1305. X   (APTR)NULL,'s',NULL,0};
  1306. X
  1307. Xstruct Menu *menustrip[3];
  1308. X
  1309. Xstruct Menu m1 = {
  1310. X     /* NextMenu           */ NULL,/*&menustrip[1],*/
  1311. X     /* LeftEdge, TopEdge  */ 1, 0,
  1312. X     /* Width, Height      */ MENU1WIDTH, 0,
  1313. X     /* Flags              */ MENUENABLED,
  1314. X     /* MenuName           */ "Project",
  1315. X     /* FirstItem          */ &MProjMIAbout
  1316. X };
  1317. X
  1318. Xstruct Menu m2 = { NULL, 90, 0, MENU2WIDTH, 0, MENUENABLED,
  1319. X                   "Options", &MOptSwitch };
  1320. X
  1321. X/* no room for another menu in lo res :-(
  1322. Xstruct Menu m3 = { NULL, 180, 0, MENU3WIDTH, 0, MENUENABLED,
  1323. X                   "Graph", &MGraphByTrial };
  1324. X*/
  1325. END_OF_FILE
  1326. if test 9874 -ne `wc -c <'screen.h'`; then
  1327.     echo shar: \"'screen.h'\" unpacked with wrong size!
  1328. fi
  1329. # end of 'screen.h'
  1330. fi
  1331. if test -f 'thumbdown.bi' -a "${1}" != "-c" ; then 
  1332.   echo shar: Will not clobber existing file \"'thumbdown.bi'\"
  1333. else
  1334. echo shar: Extracting \"'thumbdown.bi'\" \(10965 characters\)
  1335. sed "s/^X//" >'thumbdown.bi' <<'END_OF_FILE'
  1336. X/* thumbdown.bi */
  1337. X
  1338. Xextern UWORD thumbdown_data[];
  1339. X
  1340. X
  1341. X/* IMAGE STRUCTURE */
  1342. X
  1343. Xstruct Image thumbdown = {
  1344. X   0, 0, 103, 43, 5, &thumbdown_data[0], 31, 0, NULL};
  1345. X
  1346. X/* IMAGE DATA */
  1347. X
  1348. XUWORD thumbdown_data[7 * 43 * 5] = {
  1349. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1350. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1351. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1352. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1353. X0x0003,0xc000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1354. X0x0007,0xffc0,0x0000,0x0000,0x0000,0x0000,0x0000,
  1355. X0x000f,0xfffe,0x0000,0x0000,0x0000,0x0000,0x0000,
  1356. X0x000f,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,
  1357. X0x007f,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1358. X0x00f7,0xffff,0xfc00,0x0000,0x0000,0x0000,0x0000,
  1359. X0x01f8,0x3fff,0xfe00,0x00ee,0x77f9,0xc000,0x0000,
  1360. X0x01ff,0xffff,0xffff,0xf7ff,0xffff,0xf000,0x0000,
  1361. X0x01ff,0xffff,0xffbf,0xffff,0xffff,0xfe00,0x0000,
  1362. X0x00ff,0xffff,0xffbf,0xffff,0xffff,0xfe00,0x0000,
  1363. X0x037f,0xffff,0xfeff,0xffff,0xffff,0xfff0,0x0000,
  1364. X0x07c3,0xffff,0xff3f,0xffff,0xffff,0xfffe,0x0000,
  1365. X0x0ffd,0xffff,0xffff,0xffff,0xffff,0xfffe,0x0000,
  1366. X0x0fff,0xffff,0xff7f,0xffff,0xffff,0xffff,0x0000,
  1367. X0x0fff,0xffff,0xfeff,0xffff,0xffff,0xffff,0x8000,
  1368. X0x07ff,0xffff,0xfcff,0xffff,0xffff,0xffff,0x8000,
  1369. X0x03ff,0xffff,0xfc1f,0xffff,0xffff,0xffff,0xc000,
  1370. X0x0e03,0xffff,0xf807,0xffff,0xffff,0xffff,0x8000,
  1371. X0x1fff,0xffff,0xf000,0x3bff,0xffff,0xffff,0xc000,
  1372. X0x3fff,0xffff,0xf000,0x003f,0xffff,0xffff,0xe000,
  1373. X0x3fff,0xffff,0xe000,0x0003,0xffff,0xffff,0xe000,
  1374. X0x0fff,0xffff,0xe000,0x0001,0xffff,0xffff,0xe000,
  1375. X0x03ff,0xff6f,0xc000,0x0000,0x3fff,0xffff,0xc000,
  1376. X0x003e,0xe03f,0x8000,0x0000,0x1fff,0xffff,0x8000,
  1377. X0x0000,0x003f,0x8000,0x0000,0x01ff,0xfff8,0x0000,
  1378. X0x0000,0x003f,0x0000,0x0000,0x00ff,0xfff0,0x0000,
  1379. X0x0000,0x003f,0x8000,0x0000,0x000f,0xffe0,0x0000,
  1380. X0x0000,0x003f,0x8000,0x0000,0x0000,0x0e00,0x0000,
  1381. X0x0000,0x003f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1382. X0x0000,0x000f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1383. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1384. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1385. X0x0000,0x000f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1386. X0x0000,0x0007,0x8000,0x0000,0x0000,0x0000,0x0000,
  1387. X0x0000,0x0001,0xe000,0x0000,0x0000,0x0000,0x0000,
  1388. X0x0000,0x0000,0xc000,0x0000,0x0000,0x0000,0x0000,
  1389. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1390. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1391. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1392. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1393. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1394. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1395. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1396. X0x0003,0xc000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1397. X0x0007,0xffc0,0x0000,0x0000,0x0000,0x0000,0x0000,
  1398. X0x000f,0xfffe,0x0000,0x0000,0x0000,0x0000,0x0000,
  1399. X0x000f,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,
  1400. X0x007f,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1401. X0x00f7,0xffff,0xfc00,0x0000,0x0000,0x0000,0x0000,
  1402. X0x01f8,0x3fff,0xfe00,0x00ee,0x77f9,0xc000,0x0000,
  1403. X0x01ff,0xffff,0xffff,0xf7ff,0xffff,0xf000,0x0000,
  1404. X0x01ff,0xffff,0xffbf,0xffff,0xffff,0xfe00,0x0000,
  1405. X0x00ff,0xffff,0xffbf,0xffff,0xffff,0xfe00,0x0000,
  1406. X0x037f,0xffff,0xfeff,0xffff,0xffff,0xfff0,0x0000,
  1407. X0x07c3,0xffff,0xff3f,0xffff,0xffff,0xfffe,0x0000,
  1408. X0x0ffd,0xffff,0xffff,0xffff,0xffff,0xfffe,0x0000,
  1409. X0x0fff,0xffff,0xff7f,0xffff,0xffff,0xffff,0x0000,
  1410. X0x0fff,0xffff,0xfeff,0xffff,0xffff,0xffff,0x8000,
  1411. X0x07ff,0xffff,0xfcff,0xffff,0xffff,0xffff,0x8000,
  1412. X0x03ff,0xffff,0xfc1f,0xffff,0xffff,0xffff,0xc000,
  1413. X0x0e03,0xffff,0xf807,0xffff,0xffff,0xffff,0x8000,
  1414. X0x1fff,0xffff,0xf000,0x3bff,0xffff,0xffff,0xc000,
  1415. X0x3fff,0xffff,0xf000,0x003f,0xffff,0xffff,0xe000,
  1416. X0x3fff,0xffff,0xe000,0x0003,0xffff,0xffff,0xe000,
  1417. X0x0fff,0xffff,0xe000,0x0001,0xffff,0xffff,0xe000,
  1418. X0x03ff,0xff6f,0xc000,0x0000,0x3fff,0xffff,0xc000,
  1419. X0x003e,0xe03f,0x8000,0x0000,0x1fff,0xffff,0x8000,
  1420. X0x0000,0x003f,0x8000,0x0000,0x01ff,0xfff8,0x0000,
  1421. X0x0000,0x003f,0x0000,0x0000,0x00ff,0xfff0,0x0000,
  1422. X0x0000,0x003f,0x8000,0x0000,0x000f,0xffe0,0x0000,
  1423. X0x0000,0x003f,0x8000,0x0000,0x0000,0x0e00,0x0000,
  1424. X0x0000,0x003f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1425. X0x0000,0x000f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1426. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1427. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1428. X0x0000,0x000f,0xe000,0x0000,0x0000,0x0000,0x0000,
  1429. X0x0000,0x0007,0xe000,0x0000,0x0000,0x0000,0x0000,
  1430. X0x0000,0x0001,0xe000,0x0000,0x0000,0x0000,0x0000,
  1431. X0x0000,0x0000,0xc000,0x0000,0x0000,0x0000,0x0000,
  1432. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1433. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1434. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1435. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1436. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1437. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1438. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1439. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1440. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1441. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1442. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1443. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1444. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1445. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1446. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1447. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1448. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1449. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1450. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1451. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1452. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1453. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1454. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1455. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1456. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1457. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1458. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1459. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1460. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1461. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1462. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1463. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1464. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1465. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1466. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1467. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1468. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1469. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1470. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1471. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1472. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1473. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1474. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1475. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1476. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1477. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1478. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1479. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1480. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1481. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1482. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1483. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1484. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1485. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1486. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1487. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1488. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1489. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1490. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1491. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1492. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1493. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1494. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1495. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1496. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1497. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1498. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1499. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1500. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1501. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1502. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1503. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1504. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1505. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1506. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1507. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1508. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1509. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1510. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1511. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1512. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1513. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1514. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1515. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1516. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1517. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1518. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1519. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1520. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1521. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1522. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1523. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1524. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1525. X0x0003,0xc000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1526. X0x0007,0xffc0,0x0000,0x0000,0x0000,0x0000,0x0000,
  1527. X0x000f,0xfffe,0x0000,0x0000,0x0000,0x0000,0x0000,
  1528. X0x000f,0xffff,0x0000,0x0000,0x0000,0x0000,0x0000,
  1529. X0x007f,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1530. X0x00f7,0xffff,0xfc00,0x0000,0x0000,0x0000,0x0000,
  1531. X0x01f8,0x3fff,0xfe00,0x00ee,0x77f9,0xc000,0x0000,
  1532. X0x01ff,0xffff,0xffff,0xf7ff,0xffff,0xf000,0x0000,
  1533. X0x01ff,0xffff,0xffbf,0xffff,0xffff,0xfe00,0x0000,
  1534. X0x00ff,0xffff,0xffbf,0xffff,0xffff,0xfe00,0x0000,
  1535. X0x037f,0xffff,0xfeff,0xffff,0xffff,0xfff0,0x0000,
  1536. X0x07c3,0xffff,0xff3f,0xffff,0xffff,0xfffe,0x0000,
  1537. X0x0ffd,0xffff,0xffff,0xffff,0xffff,0xfffe,0x0000,
  1538. X0x0fff,0xffff,0xff7f,0xffff,0xffff,0xffff,0x0000,
  1539. X0x0fff,0xffff,0xfeff,0xffff,0xffff,0xffff,0x8000,
  1540. X0x07ff,0xffff,0xfcff,0xffff,0xffff,0xffff,0x8000,
  1541. X0x03ff,0xffff,0xfc1f,0xffff,0xffff,0xffff,0xc000,
  1542. X0x0e03,0xffff,0xf807,0xffff,0xffff,0xffff,0x8000,
  1543. X0x1fff,0xffff,0xf000,0x3bff,0xffff,0xffff,0xc000,
  1544. X0x3fff,0xffff,0xf000,0x003f,0xffff,0xffff,0xe000,
  1545. X0x3fff,0xffff,0xe000,0x0003,0xffff,0xffff,0xe000,
  1546. X0x0fff,0xffff,0xe000,0x0001,0xffff,0xffff,0xe000,
  1547. X0x03ff,0xff6f,0xc000,0x0000,0x3fff,0xffff,0xc000,
  1548. X0x003e,0xe03f,0x8000,0x0000,0x1fff,0xffff,0x8000,
  1549. X0x0000,0x003f,0x8000,0x0000,0x01ff,0xfff8,0x0000,
  1550. X0x0000,0x003f,0x0000,0x0000,0x00ff,0xfff0,0x0000,
  1551. X0x0000,0x003f,0x8000,0x0000,0x000f,0xffe0,0x0000,
  1552. X0x0000,0x003f,0x8000,0x0000,0x0000,0x0e00,0x0000,
  1553. X0x0000,0x003f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1554. X0x0000,0x000f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1555. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1556. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1557. X0x0000,0x000f,0xe000,0x0000,0x0000,0x0000,0x0000,
  1558. X0x0000,0x0007,0xe000,0x0000,0x0000,0x0000,0x0000,
  1559. X0x0000,0x0001,0xe000,0x0000,0x0000,0x0000,0x0000,
  1560. X0x0000,0x0000,0xc000,0x0000,0x0000,0x0000,0x0000,
  1561. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1562. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1563. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
  1564. END_OF_FILE
  1565. if test 10965 -ne `wc -c <'thumbdown.bi'`; then
  1566.     echo shar: \"'thumbdown.bi'\" unpacked with wrong size!
  1567. fi
  1568. # end of 'thumbdown.bi'
  1569. fi
  1570. if test -f 'thumbup.bi' -a "${1}" != "-c" ; then 
  1571.   echo shar: Will not clobber existing file \"'thumbup.bi'\"
  1572. else
  1573. echo shar: Extracting \"'thumbup.bi'\" \(10955 characters\)
  1574. sed "s/^X//" >'thumbup.bi' <<'END_OF_FILE'
  1575. X/* thumbup.bi */
  1576. X
  1577. Xextern UWORD thumbup_data[];
  1578. X
  1579. X
  1580. X/* IMAGE STRUCTURE */
  1581. X
  1582. Xstruct Image thumbup = {
  1583. X   0, 0, 103, 43, 5, &thumbup_data[0], 31, 0, NULL};
  1584. X
  1585. X/* IMAGE DATA */
  1586. X
  1587. XUWORD thumbup_data[7 * 43 * 5] = {
  1588. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1589. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1590. X0x0000,0x0007,0x0000,0x0000,0x0000,0x0000,0x0000,
  1591. X0x0000,0x000f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1592. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1593. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1594. X0x0000,0x001f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1595. X0x0000,0x001f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1596. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1597. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1598. X0x0000,0x000f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1599. X0x0000,0x000f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1600. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1601. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1602. X0x07df,0x701f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1603. X0x0fe7,0xffff,0xe000,0x0000,0x0000,0x0000,0x0000,
  1604. X0x1fff,0xffff,0xf000,0x0000,0x0000,0x0000,0x0000,
  1605. X0x1fff,0xffff,0xf000,0x0000,0x0000,0x0000,0x0000,
  1606. X0x1ff9,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1607. X0x0ff0,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1608. X0x061b,0xffff,0xfc00,0x00ee,0x77f5,0xc000,0x0000,
  1609. X0x01ff,0x7f7f,0xff0f,0xf7ff,0xffff,0xf000,0x0000,
  1610. X0x03ff,0x9f3f,0xfeff,0xffff,0xffff,0xfe00,0x0000,
  1611. X0x07ff,0x3f9f,0xfeff,0xffff,0xffff,0xfe00,0x0000,
  1612. X0x07ff,0x3fe7,0xffff,0xffff,0xffff,0xfff0,0x0000,
  1613. X0x07ff,0xdff1,0xff7f,0xffff,0xffff,0xfffe,0x0000,
  1614. X0x03f3,0xc7dd,0xffff,0xffff,0xffff,0xfffe,0x0000,
  1615. X0x01a7,0xc79f,0xff7f,0xffff,0xffff,0xffff,0x0000,
  1616. X0x007f,0xffbf,0xffff,0xffff,0xffff,0xffff,0x8000,
  1617. X0x00ff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8000,
  1618. X0x00ff,0xc7ff,0xffff,0xffff,0xffff,0xffff,0xc000,
  1619. X0x00ff,0x7bff,0xff07,0xffff,0xffff,0xffff,0x8000,
  1620. X0x007c,0xf9ff,0xfe00,0x3bff,0xffff,0xffff,0xc000,
  1621. X0x003f,0xfbff,0xfc00,0x003f,0xffff,0xffff,0xe000,
  1622. X0x0007,0xffff,0x8000,0x0003,0xffff,0xffff,0xe000,
  1623. X0x0007,0xffff,0x0000,0x0001,0xffff,0xffff,0xe000,
  1624. X0x0003,0xffe0,0x0000,0x0000,0x3fff,0xffff,0xc000,
  1625. X0x0001,0xe000,0x0000,0x0000,0x1fff,0xffff,0x8000,
  1626. X0x0000,0x0000,0x0000,0x0000,0x01ff,0xfff8,0x0000,
  1627. X0x0000,0x0000,0x0000,0x0000,0x00ff,0xfff0,0x0000,
  1628. X0x0000,0x0000,0x0000,0x0000,0x000f,0xfde0,0x0000,
  1629. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0c00,0x0000,
  1630. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1631. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1632. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1633. X0x0000,0x0007,0x0000,0x0000,0x0000,0x0000,0x0000,
  1634. X0x0000,0x000f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1635. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1636. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1637. X0x0000,0x001f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1638. X0x0000,0x001f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1639. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1640. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1641. X0x0000,0x000f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1642. X0x0000,0x000f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1643. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1644. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1645. X0x07df,0x701f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1646. X0x0fe7,0xffff,0xe000,0x0000,0x0000,0x0000,0x0000,
  1647. X0x1fff,0xffff,0xf000,0x0000,0x0000,0x0000,0x0000,
  1648. X0x1fff,0xffff,0xf000,0x0000,0x0000,0x0000,0x0000,
  1649. X0x1fff,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1650. X0x0fff,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1651. X0x061f,0xffff,0xfc00,0x00ee,0x77f5,0xc000,0x0000,
  1652. X0x01ff,0x7f7f,0xff0f,0xf7ff,0xffff,0xf000,0x0000,
  1653. X0x03ff,0xff3f,0xfeff,0xffff,0xffff,0xfe00,0x0000,
  1654. X0x07ff,0xff9f,0xfeff,0xffff,0xffff,0xfe00,0x0000,
  1655. X0x07ff,0xffe7,0xffff,0xffff,0xffff,0xfff0,0x0000,
  1656. X0x07ff,0xdff1,0xff7f,0xffff,0xffff,0xfffe,0x0000,
  1657. X0x03f3,0xffdd,0xffff,0xffff,0xffff,0xfffe,0x0000,
  1658. X0x01a7,0xff9f,0xff7f,0xffff,0xffff,0xffff,0x0000,
  1659. X0x007f,0xffbf,0xffff,0xffff,0xffff,0xffff,0x8000,
  1660. X0x00ff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8000,
  1661. X0x00ff,0xc7ff,0xffff,0xffff,0xffff,0xffff,0xc000,
  1662. X0x00ff,0x7fff,0xff07,0xffff,0xffff,0xffff,0x8000,
  1663. X0x007c,0xffff,0xfe00,0x3bff,0xffff,0xffff,0xc000,
  1664. X0x003f,0xffff,0xfc00,0x003f,0xffff,0xffff,0xe000,
  1665. X0x0007,0xffff,0x8000,0x0003,0xffff,0xffff,0xe000,
  1666. X0x0007,0xffff,0x0000,0x0001,0xffff,0xffff,0xe000,
  1667. X0x0003,0xffe0,0x0000,0x0000,0x3fff,0xffff,0xc000,
  1668. X0x0001,0xe000,0x0000,0x0000,0x1fff,0xffff,0x8000,
  1669. X0x0000,0x0000,0x0000,0x0000,0x01ff,0xfff8,0x0000,
  1670. X0x0000,0x0000,0x0000,0x0000,0x00ff,0xfff0,0x0000,
  1671. X0x0000,0x0000,0x0000,0x0000,0x000f,0xfde0,0x0000,
  1672. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0c00,0x0000,
  1673. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1674. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1675. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1676. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1677. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1678. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1679. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1680. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1681. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1682. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1683. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1684. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1685. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1686. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1687. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1688. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1689. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1690. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1691. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1692. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1693. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1694. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1695. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1696. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1697. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1698. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1699. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1700. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1701. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1702. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1703. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1704. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1705. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1706. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1707. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1708. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1709. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1710. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1711. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1712. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1713. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1714. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1715. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1716. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1717. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1718. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1719. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1720. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1721. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1722. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1723. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1724. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1725. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1726. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1727. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1728. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1729. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1730. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1731. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1732. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1733. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1734. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1735. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1736. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1737. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1738. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1739. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1740. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1741. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1742. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1743. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1744. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1745. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1746. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1747. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1748. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1749. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1750. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1751. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1752. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1753. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1754. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1755. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1756. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1757. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1758. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1759. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1760. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1761. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
  1762. X0x0000,0x0007,0x0000,0x0000,0x0000,0x0000,0x0000,
  1763. X0x0000,0x000f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1764. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1765. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1766. X0x0000,0x001f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1767. X0x0000,0x001f,0x0000,0x0000,0x0000,0x0000,0x0000,
  1768. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1769. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1770. X0x0000,0x000f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1771. X0x0000,0x000f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1772. X0x0000,0x001f,0x8000,0x0000,0x0000,0x0000,0x0000,
  1773. X0x0000,0x001f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1774. X0x07df,0x701f,0xc000,0x0000,0x0000,0x0000,0x0000,
  1775. X0x0fe7,0xffff,0xe000,0x0000,0x0000,0x0000,0x0000,
  1776. X0x1fff,0xffff,0xf000,0x0000,0x0000,0x0000,0x0000,
  1777. X0x1fff,0xffff,0xf000,0x0000,0x0000,0x0000,0x0000,
  1778. X0x1fff,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1779. X0x0fff,0xffff,0xf800,0x0000,0x0000,0x0000,0x0000,
  1780. X0x061f,0xffff,0xfc00,0x00ee,0x77f5,0xc000,0x0000,
  1781. X0x01ff,0x7f7f,0xff0f,0xf7ff,0xffff,0xf000,0x0000,
  1782. X0x03ff,0xff3f,0xfeff,0xffff,0xffff,0xfe00,0x0000,
  1783. X0x07ff,0xff9f,0xfeff,0xffff,0xffff,0xfe00,0x0000,
  1784. X0x07ff,0xffe7,0xffff,0xffff,0xffff,0xfff0,0x0000,
  1785. X0x07ff,0xdff1,0xff7f,0xffff,0xffff,0xfffe,0x0000,
  1786. X0x03f3,0xffdd,0xffff,0xffff,0xffff,0xfffe,0x0000,
  1787. X0x01a7,0xff9f,0xff7f,0xffff,0xffff,0xffff,0x0000,
  1788. X0x007f,0xffbf,0xffff,0xffff,0xffff,0xffff,0x8000,
  1789. X0x00ff,0xffff,0xffff,0xffff,0xffff,0xffff,0x8000,
  1790. X0x00ff,0xc7ff,0xffff,0xffff,0xffff,0xffff,0xc000,
  1791. X0x00ff,0x7fff,0xff07,0xffff,0xffff,0xffff,0x8000,
  1792. X0x007c,0xffff,0xfe00,0x3bff,0xffff,0xffff,0xc000,
  1793. X0x003f,0xffff,0xfc00,0x003f,0xffff,0xffff,0xe000,
  1794. X0x0007,0xffff,0x8000,0x0003,0xffff,0xffff,0xe000,
  1795. X0x0007,0xffff,0x0000,0x0001,0xffff,0xffff,0xe000,
  1796. X0x0003,0xffe0,0x0000,0x0000,0x3fff,0xffff,0xc000,
  1797. X0x0001,0xe000,0x0000,0x0000,0x1fff,0xffff,0x8000,
  1798. X0x0000,0x0000,0x0000,0x0000,0x01ff,0xfff8,0x0000,
  1799. X0x0000,0x0000,0x0000,0x0000,0x00ff,0xfff0,0x0000,
  1800. X0x0000,0x0000,0x0000,0x0000,0x000f,0xfde0,0x0000,
  1801. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0c00,0x0000,
  1802. X0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000};
  1803. END_OF_FILE
  1804. if test 10955 -ne `wc -c <'thumbup.bi'`; then
  1805.     echo shar: \"'thumbup.bi'\" unpacked with wrong size!
  1806. fi
  1807. # end of 'thumbup.bi'
  1808. fi
  1809. if test -f 'zhongwen1' -a "${1}" != "-c" ; then 
  1810.   echo shar: Will not clobber existing file \"'zhongwen1'\"
  1811. else
  1812. echo shar: Extracting \"'zhongwen1'\" \(516 characters\)
  1813. sed "s/^X//" >'zhongwen1' <<'END_OF_FILE'
  1814. Xrice cracker/senbei:jian{1|-}bing{3|\/|~}
  1815. X{be} jealous:chi{1|-}cu{4|\}
  1816. Xgive up all hope|despair:jue{2|/}wang{4|\}
  1817. Xshow loving care for:guan{1|-}huai{2|/}
  1818. Xsetting sun:xi{1|-}yang{2|/}
  1819. Xdusk:huang{2|/}hun{1|-}
  1820. Xshort in duration|brief:duan{3|\/|~}zan{4|\}
  1821. Xbring to mind|recall|recollect:hui{2|/}yi{4|\}
  1822. Xeach other|one another:bi{3|\/|~}ci{3|\/|~}
  1823. Xloneliness:gu{1|-}ji{4|\}
  1824. X{to} remain:liu{2|/}xia{4|\}
  1825. Xas if|seem to:fang{3|\/|~}fu{2|/}
  1826. Xput up with|tolerate:rong{2|/}ren{3|\/|~}
  1827. X{promise to}undertake:cheng{2|/}nuo{4|\}
  1828. X
  1829. END_OF_FILE
  1830. if test 516 -ne `wc -c <'zhongwen1'`; then
  1831.     echo shar: \"'zhongwen1'\" unpacked with wrong size!
  1832. fi
  1833. # end of 'zhongwen1'
  1834. fi
  1835. if test -f 'zhongwen1.sc' -a "${1}" != "-c" ; then 
  1836.   echo shar: Will not clobber existing file \"'zhongwen1.sc'\"
  1837. else
  1838. echo shar: Extracting \"'zhongwen1.sc'\" \(23 characters\)
  1839. sed "s/^X//" >'zhongwen1.sc' <<'END_OF_FILE'
  1840. X13 3 8 2 
  1841. X12 2 8 
  1842. X
  1843. X5 
  1844. X
  1845. END_OF_FILE
  1846. if test 23 -ne `wc -c <'zhongwen1.sc'`; then
  1847.     echo shar: \"'zhongwen1.sc'\" unpacked with wrong size!
  1848. fi
  1849. # end of 'zhongwen1.sc'
  1850. fi
  1851. echo shar: End of archive 1 \(of 2\).
  1852. cp /dev/null ark1isdone
  1853. MISSING=""
  1854. for I in 1 2 ; do
  1855.     if test ! -f ark${I}isdone ; then
  1856.     MISSING="${MISSING} ${I}"
  1857.     fi
  1858. done
  1859. if test "${MISSING}" = "" ; then
  1860.     echo You have unpacked both archives.
  1861.     rm -f ark[1-9]isdone
  1862. else
  1863.     echo You still need to unpack the following archives:
  1864.     echo "        " ${MISSING}
  1865. fi
  1866. ##  End of shell archive.
  1867. exit 0
  1868. -- 
  1869. Mail submissions (sources or binaries) to <amiga@uunet.uu.net>.
  1870. Mail comments to the moderator at <amiga-request@uunet.uu.net>.
  1871. Post requests for sources, and general discussion to comp.sys.amiga.misc.
  1872.